|
このテクニカルノートでは、ホストマシンとターゲットマシンを接続するためにEthernet を使って、デバイスのファームウェアをデバッグする方法について説明しています。
この方法では、Ethernet と Telnet プロトコルを使って、Forth コードファイルの編集、デバッグ、および実行をします。
本文書は、PCI デバイスの設計者、ドライバの開発者、診断機能の開発者などに向けて書かれています。実のところ本文書は、ローカルバスのレベルで PCI 周辺機器とやり取りする方法を知っているすべての技術者にとって、興味深いでしょう。
Ethernet を使った方法でデバッグすることに決めた場合には、本文書で使われているツールのいくつかは、シェアウェアであることに注意してください。
更新:[1996 年 6 月 15 日]
|
1 マシンモードでなく 2 マシンモードを使う理由
1 マシンモード
本文書の執筆時点では、Open Firmware を使うアップルの大多数のシステムは、「1 マシンモード」で Open Firmware モードに入ります。
「1 マシンモード」とは、Open Firmware を使っている同一マシン上で編集とデバッグが行われる Open
Firmware 環境をいいます。
「1 マシンモード」では、ユーザは、テキストコマンド(複数の単語から構成)をシステムのキーボードから入力し、システムのディスプレイ上で表示するコマンドラインのインタフェースしか使えません。
スクリーン上の情報は、一度スクロールすれば失われてしまいます。
Open Firmware ユーザインタフェースを使えば、 Open Firmware を 1 マシンモードで簡単に使えます。デバイスツリーを見たり、デバッグ対象ノードにプロパティを追加したり、または Open Firmware コードを少しだけ入力したりするだけなら、これで十分でしょう。
しかし、1 マシンモードには小さな I/O バッファしかありません。テキストが 1 ページを超えると、先頭はスクリーン上部からスクロールして失われ、入力した情報および結果の出力は永久に失われます。Open Firmware の UI を使って、インタラクティブに作業をすることが非常に多い場合、これはすぐに頭痛の種になるでしょう。
このスクロールに関する問題に加え、1 マシンモード環境におけるコードのテストとデバッグは、マシンを再起動するとほとんどの作業内容が失われてしまうので、困難で面倒です。
1 マシンモードでコードを開発するときはたいてい、ユーザは、すべての開発コードを一から入力するか、手間のかかる方法を使ってマシン上のマスストレージデバイスにコードを保存する必要があります。デバイスの拡張 ROM の Forth コードのデバッグなどさらに複雑な作業の場合は、常に作業結果を保存し確認する必要があります。
2 マシンモード
「2 マシンモード」とは、端末および大きなバッファとして機能する第 2 のマシン上で編集とデバッグを実行する Open Firmware 環境のことをいいます。2 マシンモードでは、作業内容を簡単に保存できるので、ほとんどの場合 1 マシンモードよりも望ましいです。
ホストマシンがなければ、入力したテキストは再起動すると失われます。これはデバッグ時に頻繁に起こり得ることです。第 2 の安定性の高いマシン上に作業内容をすぐに保存できれば、2 台のマシンを使うことでデバッグ時間が確実に短くなります。
デバイスの拡張 ROM の Forth コードのデバッグなど、より複雑な作業をしている場合に、マシンを再起動する必要が生じれば、大量の作業内容が失われてしまう可能性があります。
2 マシンモードとは本来、2 つのマシンのシリアルポートに接続されたシリアルケーブルを介して、ホストマシンと Open Firmware のターゲットマシンとをつなぐことを意味してました。iMac 以降、従来のシリアルポートは I/O ポートとしては使われなくなっており、2 マシンモードを使って、保存した Forth コードファイルをダウンロードするのは難しくなっています。
本文書では、開発およびデバッグを行うときに、2 つのマシン間で Forth コードを転送するメリットを再び享受できるように、Ethernet を使って、ホストと Open Firmware システムを接続する方法を説明します。
先頭に戻る
Ethernet を使った 2 マシンモードでのデバッグに必要なツール
Ethernet を使った 2 マシンモードでのデバッグに必要なツールは次のとおりです。
- Open Firmware のターゲットマシン。
開発対象の、Open Firmware コードのテスト場所となるマシン。このマシンは、Open Firmware 環境に置かれます。
- Ethernet ポートを持つ(サーバ)ホストマシン。
ホストマシン用 TFTP サーバアプリケーションを実行できる、Ethernet ポートを持つ任意のマシンが使えます。このマシンは、Open
Firmware コードを開発、編集するために、また Open Firmware 環境にあるマシンとやり取りするために使用します。
2 つのマシンを、ハブを介して接続するときは通常の Ethernet ケーブル、直接つなぐときは Ethernet クロスケーブルを使います。
- 2 つのマシンを接続する Ethernet ケーブル(1 本または複数本)。
両端に RJ-45 コネクタの付いた、Ethernet ストレートケーブルか Ethernet クロスケーブル。ケーブルの種類は、使用する Ethernet ネットワークの種類によります。
- ホストマシン用 TFTP サーバアプリケーション。
ホストマシン上で実行され、
Open Firmware の(ターゲット)マシンに対してファイル転送サーバとして機能するアプリケーション。本文書の例では、TFTP サーバアプリケーションは、Macintosh 用の TFTP Daemon です。
- TFTP Daemon は、TFTP Daemon で見つけることができます。
- TFTP Daemon は、シェアウェアアプリケーションなので、作成者により登録料金が請求されます。
- TFTP サーバを終了させるアプリケーションまたはプロセス。
ホストマシン上で実行されているプロセス(TFTP Daemon など)の一覧を表示したり強制終了(kill)したりするためのアプリケーション。
本書の例では、TFTP アプリケーションの終了または強制終了を可能にします。
ProcessWatcher は、ProcessWatcher で見つけることができます。
- 動作可能な Ethernet ネットワーク。
2 つのマシンをつなぐ有効な Ethernet ネットワーク。LAN、DSL、T1 などによる接続、または 1 本のクロスケーブルによる接続のどれを使っても構いません。
- ターゲット(クライアント)マシンのための有効な Ethernet IP アドレス。
Open
Firmware 環境にあるターゲットマシンに必要です。
- ホスト(サーバ)マシンのための有効な Ethernet IP アドレス。
FORTH
ファイルの開発場所となるホストマシンに必要です。
- Ethernet ルータのための有効な IP アドレス。
ターゲットマシンとやり取りするために必要です。
先頭に戻る
Ethernet への対応度の確認
これまでにコードのデバッグをするためにシリアルインタフェースを使ったことがあるならば、Ethernet の使用手順はそれとほぼ同じです。ただし、Ethernet には、シリアルポートの代わりに Ethernet ポートが必要であり、また初期化シーケンスは当然異なります。
ホストマシンには、Ethernet クライアントアプリケーションがあり、ターゲットマシンと Ethernet ケーブルを介して接続されます。
ターゲットマシンには、Open
Firmware 環境に Ethernet サーバが実装されています。最初にターゲットマシンが、
Ethernet に対応していることを確認しなければなりません。Ethernet に対応可能な最初の Macintosh は、一部の G4 に限られます。自分の G4 に、Ethernet サーバがあるかどうかを確める必要があります。次に、これを行うための手順を示します。
Open Firmware のユーザインタフェースにおいて、デバイスツリーの packages ノードを選択します。この packages ノードは、PCI デバイスノードが使用できるサポートノードです。Ethernet を使う場合、
/packages/Ethernet ノードが 2 つのマシン間の接続をサポートするために使われます。マシンに、
/packages/Ethernet ノードがあれば、
Ethernet を介してデバッグが可能です。
0 > dev /packages ls
ff83ebf8: /deblocker
ff83f518: /disk-label
ff83ff18: /obp-tftp
ff847048: /Ethernet <-----このノードを探す----
ff8478c8: /mac-parts
ff8489a0: /mac-files
ff84b7b0: /hfs-plus-files
ff850520: /fat-files
ff852250: /iso-9660-files
ff852e58: /bootinfo-loader
ff854af8: /xcoff-loader
ff855510: /pe-loader
ff855ee8: /elf-loader
ff857518: /usb-hid-class
ff859858: /usb-ms-class
ff85bbf8: /sbp2-disk
ff85e1c0: /ata-disk
ff85f420: /atapi-disk
ff860af8: /bootpath-search
ff8673e8: /terminal-emulator
ok
0 >
|
先頭に戻る
正しい Ethernet 接続の使用
Ethernet ネットワークを使った Open Firmware コマンドの送信は、インターネットのトラフィックおよび不必要なブロードキャストメッセージにより速度が遅くなる場合があります。インターネットのトラフィックを避けて、ハブを使わずに 2 つの 10BaseT Ethernet デバイス間のポイントツーポイントの接続を可能にするために、クロスケーブルを使うことができます。クロスケーブルは作成することも購入することも可能です。
クロスケーブルの作成とは、基本的には、1 方の RJ45 Ethernet コネクタの送信線を
もう 1 方の RJ45 Ethernet コネクタの受信線につなぎ替えることです。
クロスケーブルを作成して 2 つの Macintosh コンピュータをつなぐ方法については、
Tech Info Library の記事:
Macintosh:
Transferring Information Between Computers Using Ethernet.
Article ID: 43015 にその概略があります。
クロスケーブルの作成についての説明は、次の URL の Web サイトにもあります。
- Ethernet
Crossover Cable Pin Out
- Ethernet
Crossover Cable How To Guide
- RJ45
Connector
クロスケーブルは、コンピュータおよび周辺機器を販売または提供するほとんどの小売店で購入することができます。たとえば、次の小売 Web サイトがあります。
We Sell Cables
先頭に戻る
マシンのセットアップ
ホストマシンとターゲットマシンを、有効な Ethernet ネットワーク上で、適切なケーブルを使って接続する必要があります。前述したとおり、インターネットトラフィックが、ホストマシンとターゲットマシンの間の通信に悪影響を与える可能性があるので、2 つのマシンの接続にはクロスケーブルを使うことをお勧めします。以降では、クロスケーブルの使用を前提にしています。
「Ethernet を使った 2 マシンモードでのデバッグに必要なツール」の節で挙げた 8 つのツールを用意したら、ホストマシンとターゲットマシンの通信を確立するために次の手順に従います。
- Ethernet クロスケーブルを使ってホストマシンとターゲットマシンを接続します。
ホストマシンでは Mac OS を実行し、ターゲットマシンでは Open Firmware ユーザインタフェースを実行します。
- ホストマシンで、TFTP サーバアプリケーションを立ち上げます。
例 1 TFTP Daemon サーバアプリケーションの例
- TFTP Daemon アプリケーションを起動し、TFTP サーバのプロセスを開始します。

このアプリケーションは、ホストとなる Macintosh の System フォルダ内の Preferences フォルダに TFTP Folder をインストールします。

TFTP Folder には、複数のフォルダ、つまり readable フォルダと writeable フォルダが含まれています。

Forth 開発コードファイルを、
テキストファイルとして
readable フォルダに保存します。

例 1 で使用されている TFTP Daemon アプリケーションは、起動時に、ホストマシン、Mac OS の System フォルダにある Preferences フォルダに TFTP Folder という名前のフォルダをインストールします。このサーバアプリケーションは、表立つことはせずに、バックグラウンドで動作し続けます。
これは、ホストマシンにある、ターゲットマシンの FORTH コードを開発するために使用されるファイルです。
ホストマシンのテキストエディタを使って、TFTP ブートファイルフォルダで Forth コードファイルの作成、編集、および保存を行います。
¥ このファイルは、コロンで定義され、書式化され、
¥ 一般的に使われている、いくつかの Open Firmware の基本関数を含みます。
: grtng1 ( --) ." cmds? = display these words (commands) " cr ;
: grtng2 ( --) ." update = get new file update " cr ;
: grtng3 ( --) ." sl-root = select root (dev /) " cr ;
: grtng4 ( --) ." sl-pci = select PCI node (dev pci) & pwd " cr ;
: grtng5 ( --) ." my-pwd = formatted directory (pwd) " cr ;
: grtng6 ( --) ." dv-tree = key controlled dev tree list (ls) " cr ;
: grtng7 ( --) ." prop-lst = formatted property list (.properties) " cr ;
: hello ( -- ) cr ." Hello Open Firmware" ;
: slctroot ( -- ) " ... selecting 'root' " cr ;
: slctpci ( -- ) " ... selecting 'pci' " cr ;
: scrl-start ( -- ) cr ." press Control-Q to continue scrolling" ;
: scrl-stop ( -- ) cr ." press Control-S to stop scrolling" ;
: wt-4-key ( -- ) cr ." press space bar to continue ... " key clear ;
: cmds? ( --) cr grtng1 grtng2 grtng3 grtng4 grtng5 grtng6 grtng7 ;
cmds? cr cr hello cr cr
: update ( -- ) " boot enet:10.1.2.2,myfile,10.1.2.3;
255.255.0.0,;10.1.2.2" evaluate ;
: sl-root ( -- ) slctroot clear " /" find-device ;
: my-pwd ( -- ) cr cr ." " pwd ." = current working directory" ;
: sl-pci ( -- ) slctpci clear " pci" find-device my-pwd cr cr ;
: dv-tree ( -- ) cr scrl-stop scrl-start cr cr wt-4-key cr cr ls ;
: prop-lst ( -- ) cr cr ." *** Properties *** " cr .properties ;
¥ ファイル終了位置のコメント(終了位置がわかるようにするため)。
|
例 3 テキストファイルの例(myfile)
|
- デバッグ対象のシステムの Open Firmware ユーザインタフェースにおいて、次を入力します。
boot enet:<server IP>,<file name>,<client IP>;<subnet>,;<router IP>
ここで、
<server IP> は、ホスト/TFTP サーバシステム(ファイルを作成、編集しているシステム)の IP アドレスです。
<file name> は、転送するテキストファイル(TFTP の readable フォルダにあるファイル)の名前です。
<client IP> は、ターゲット/クライアントシステム(ファイル転送先の Open Firmware 環境にあるマシン)の IP アドレスです。
<subnet> は、サーバのサブネット IP マスク。
<router IP> は、接続しているネットワークにおける、ネームサーバ(ルータ)の IP アドレスです。
幸いなことに、Macintosh では、これらの IP アドレスのほとんどを、Apple System Profiler
(ASP) アプリケーションの「Network overview」(ネットワークの概要)というタイトルの下の TCP/IP ノードから簡単に取得できます。
例 4 Apple System Profiler
の「Network overview」(ネットワークの概要)
Apple System Profiler の「Network overview」(ネットワークの概要)のタイトルの下にある項目
<server IP> = IP Address(IP
アドレス)
(17.203.23.69 など)
<subnet> = Netmask(ネットマスク)
(255.255.252.0 など)
<router IP> = Name server address(ネームサーバのアドレス)(
17.128.100.12 など)
「正しい Ethernet 接続の使用」の節で説明したように、クロスケーブルを使用することにより、インターネットトラフィックおよび不必要なブロードキャストメッセージにより引き起こされる問題はなくなります。クロスケーブルを使用するネットワークにおいては、ホスト(サーバ)の IP アドレスは、サーバの IP アドレスとルータの IP アドレスの両方になるので、2 度入力する必要があります。
上の例 3 でわかるように、サーバの
IP アドレスとルータの IP アドレスは共に、10.1.2.2
であり、ターゲットマシンの IP アドレスは
10.1.2.3. です。
クロスケーブルを使用するネットワークでは、サーバとルータの IP アドレスは、TCP/IP コントロールパネルの IP アドレスと同じでなければなりません。ただし、ターゲットの IP アドレスとは、一番右の数字が違っていなければなりません。
たとえば、デバッグ対象のシステムにおいて、次を入力します。
boot
enet:10.1.2.2,myfile,10.1.2.3;255.255.0.0,;10.1.2.2
ターゲットマシン(Open Firmware 環境にある)のキーボードで Return または Enter を押すと命令が実行されます。指定したファイル(myfile など)の内容が、ホスト(サーバ)マシンからコードが実行されるターゲットマシンに転送されます。
FORTH コードファイルの編集は、ホストマシンで行えます。各更新内容は、上記の
boot enet コマンドを入力すればテストできます。
例 3 に、boot enet コマンドと IP アドレスの短縮となる update という単語が含まれていることに注目してください。
システムをセットアップしたら、編集セッションとデバッグセッションは、図 2 に示す簡単な流れになります。

図 2 Ethernet / Telnet によるデバッグの流れ図
先頭に戻る
要約
ブートシーケンスの実行中にコードをデバッグするのは困難です。シーケンスの実行中には、システムリソースが利用できないからです。これは、 Forth コードが周辺デバイスに埋め込まれている場合に特にいえます。Open Firmware(1 マシンモード)インタフェースでは、開発者が情報を保存する能力が制限を受けるので、デバッグの過程が遅れる可能性があります。
Ethernet を使って、2 マシンモードインタフェースを提供すれば、開発サイクルの短縮を支援する、まさにもう 1 つのツールとなります。この方法により、ホストマシン上の FORTH コードファイルを、素早く簡単に保存、編集し、Open Firmware 環境にあるターゲットマシンにそのファイルを転送し、そこで実行、テストする機能が追加されます。
先頭に戻る
参考文献
PCI Development
Technical Notes: Hardware
Questions & Answers: Hardware
先頭に戻る
ダウンロード
先頭に戻る
|